﻿//===========================[ 7 / 6 / 2011 LVI ]==========================
//              Copyright c Vitaly Lyaschenko <SkyChameleon@gmail.com>
//                              Header file
// Purpose:
//=========================================================================
#pragma once

#include "mathlib.h"
#include "SoundData.h"



//typedef std::map< uint, SoundInfo> TSoundBuffer;

class cSoundSource
{
public:
    cSoundSource();
    ~cSoundSource();

    bool createSound( const std::string &nameSound, const bool isLoop );

    void sound_Play();
    void sound_Pause();
    void sound_Stop();
    void sound_Rewind();
    void sound_Update();

    void releaseSound();
    void moveSound( const float x, const float y, const float z );
    void moveSound( const vec3 pos );

    uint getId() const { return m_SourceID; }
    void setLooping( const bool isLoop );
    void setStreamed( const bool isStream ) { m_isStreamed = isStream; }
    
    void setPosition( const vec3 v ) { m_Position = v; }
    void setPosition( const float x, const float y, const float z );
    void setVelosity( const vec3 vel ) { m_Velosity = vel; }
    void setVelosity( const float x, const float y, const float z );
    void setPitch( float pitch );
    void setGain( float gain );

    uint  getSourceID() const { return m_SourceID; }
    vec3  getPosition() const { return m_Position; }
    vec3  getVelosity() const { return m_Velosity; }
    float getGain()     const { return m_Gain; }
    float getPitch()    const { return m_Pitch; }
    bool  isLooping()   const { return m_isLooped; }

    bool isStreamed() const { return m_isStreamed; }

private:
    SoundData *pSoundData;

    uint   m_BufID[2];	// id buffers
    int    m_CurrentBuffer;
    _8ubit *pBuff;

    uint  m_SourceID;	// ID source
    float m_Pitch;
    float m_Gain;

    vec3 m_Velosity;    // скорость источника звука
    vec3 m_Position;    // позиция источника звука

    // потоковый звук yes/no
    bool m_isStreamed;	// потоковое/Фоновое проигрывание
    bool m_isLooped;	// бесконечно в цикле
    uint m_Rate;		// частота звука
    uint m_Format;		// формат звука
};